/**
 * 给定一个字符串，每次将其字典序最大的子序列循环右移一位
 * 问最后能否令字符串有序
 * 初始最大子序列显然是确定的，随后每次操作显然都与其他字母无关
 * 最后会发现，相当于将最大子序列进行reverse操作
 * 然后检查一下即可，注意最大字母的数量可能有多个
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

int N;
string S;

int proc(){  
    if(1 == N) return 0;

    vvi pos(26, vi());
    for(int i=0;i<N;++i)pos[S[i] - 'a'].push_back(i);
    int k = 25;
    while(pos[k].empty()) --k;
    assert(k != -1);

    if(0 == k) return 0;

    vector<char> mm(N);
    mm[N - 1] = S[N - 1];
    for(int i=N-2;i>=0;--i){
        mm[i] = max(mm[i + 1], S[i]);
    }

    vi tmp; tmp.reserve(N);
    for(int i=0;i<N;++i){
        if(S[i] == mm[i]){
            tmp.push_back(i);
        }
    }

    for(int i=0,n=tmp.size();i<n/2;++i){
        swap(S[tmp[i]], S[tmp[n-1-i]]); 
    }

    bool flag = is_sorted(S.begin(), S.end());
    if(not flag) return -1;
    int ans = tmp.size() - pos[k].size();
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> N >> S;
        cout << proc() << endl;
    }
    return 0;
}